<?php
/** 
 * 传送新浪接口[简称sina]API参数到网店http://mall.sina.com.cn/OrderWebService.asmx,得到相应返回值。
 * @author alex  
 * @version v1.0  2010-5-8
 */
class SinaRequest {
	/**
	 * @var string $host_url sina API的网站地址：http://mall.sina.com.cn/OrderWebService.asmx
	 */
	var $_host_url='http://mall.sina.com.cn/OrderWebService.asmx';
	
	/**
	 * @var array $app_token 应用app访问sina的令牌，参数包括：<br/>
	 * string Username  商户在新浪商城的merchentId<br/>
	 * string Password  新浪商城提供给商户的密码
	 * 还必须在新浪商城有Ip – 商户指定的有效ip组(有效ip之外的ip无权访问商城webservice)
	 */
	var $app_token=array();
	
	
	/**
	 * @var array $app_setting 应用app访问sina的通用参数设置，一般不改变此设置。
	 * 如果要跟踪设置'trace'=>true
	 */
	var $app_setting=array('soap_version'=>SOAP_1_2,'exceptions'=>false);
	
	/**
	 *  @var object|string $soap_fault 上次调用API接口的SoapFault，如果没有为NULL.
	 */
	var $soap_fault=NULL;
	/**
	 * 得到sina API的返回值。
	 * @param string $funcname 要调用的api接口的websevice 函数名称，如GetOrderInfo，如果为空，将返回false.
	 * @param array $paramArr 要调用的api接口的参数数组，如array('orderId'=>97913707)
	 * @return mixed 调用的api接口得到的值，如果返回NULL,调用失败。
	 */
	function get($funcname,array $paramArr){
		$this->soap_fault=NULL;
		if(! $funcname){
			$this->soap_fault='未设置访问新浪websevice 函数名称';
			return NULL;
		} 
		if(!$this->app_token['Username'] || !$this->app_token['Password']){
			$this->soap_fault='未设置访问新浪websevice的Username或Password';
			return NULL;
		} 
		$client = new SoapClient(dirname(__FILE__).'/OrderWebService.wsdl',$this->app_setting);
        $headers=array('Username'=>$this->app_token['Username'],
                        'Password'=>$this->app_token['Password']);
        $header=new SoapHeader('http://tempuri.org/','OrderSoapHeader',$headers);
        $client->__setSoapHeaders($header);
        
        $realparam=array();
        foreach ($paramArr as $key=>$val) 
          if($key && isset($val)) 
             $realparam[$key]=$val;
        $param=array();
        $param[$funcname]=$realparam;
        $resultobj=$client->__soapCall($funcname,$param);
        if(is_soap_fault($resultobj)){
        	$this->soap_fault=$resultobj;
        	return NULL;
        }
        $resultkey=$funcname.'Result';
        if(! property_exists($resultobj,$resultkey)){
        	$this->soap_fault='新浪websevice 返回值格式错误，找不到' . $resultkey;
        	return NULL;
        } 
        $result=$resultobj->$resultkey;
        if (is_string($result) && strpos($result,'error:')!==false){
        	$this->soap_fault=$result;
        	return NULL;
        }
        return $result;
	}
	/**
	 * 检查接口调用get函数返回是否有错误
	 * @param  mixed $result  接口调用get函数返回值.
	 * @return bool true 接口调用有效，false 接口调用出错.
	 */
	function checkResult(&$result){
        if (is_string($result) && strpos($result,'error:')!==false){
            $this->soap_fault=$result;
            return false;
		}
		return true;
	}
	
}

